home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-13 / mg2a_src.zip / CINFO.C < prev    next >
C/C++ Source or Header  |  1991-02-16  |  3KB  |  136 lines

  1. /*
  2.  *        Character class tables.
  3.  * Do it yourself character classification
  4.  * macros, that understand the multinational character set,
  5.  * and let me ask some questions the standard macros (in
  6.  * ctype.h) don't let you ask.
  7.  */
  8. #include    "def.h"
  9.  
  10. /*
  11.  * This table, indexed by a character drawn
  12.  * from the 256 member character set, is used by my
  13.  * own character type macros to answer questions about the
  14.  * type of a character. It handles the full multinational
  15.  * character set, and lets me ask some questions that the
  16.  * standard "ctype" macros cannot ask.
  17.  */
  18. char    cinfo[256] = {
  19.     _C,        _C,        _C,        _C,    /* 0x0X */
  20.     _C,        _C,        _C,        _C,
  21.     _C,        _C,        _C,        _C,
  22.     _C,        _C,        _C,        _C,
  23.     _C,        _C,        _C,        _C,    /* 0x1X */
  24.     _C,        _C,        _C,        _C,
  25.     _C,        _C,        _C,        _C,
  26.     _C,        _C,        _C,        _C,
  27.     0,        _P,        0,        0,    /* 0x2X */
  28.     _W,        _W,        0,        _W,
  29.     0,        0,        0,        0,
  30.     0,        0,        _P,        0,
  31.     _D|_W,        _D|_W,        _D|_W,        _D|_W,    /* 0x3X */
  32.     _D|_W,        _D|_W,        _D|_W,        _D|_W,
  33.     _D|_W,        _D|_W,        0,        0,
  34.     0,        0,        0,        _P,
  35.     0,        _U|_W,        _U|_W,        _U|_W,    /* 0x4X */
  36.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  37.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  38.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  39.     _U|_W,        _U|_W,        _U|_W,        _U|_W,    /* 0x5X */
  40.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  41.     _U|_W,        _U|_W,        _U|_W,        0,
  42.     0,        0,        0,        0,
  43.     0,        _L|_W,        _L|_W,        _L|_W,    /* 0x6X */
  44.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  45.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  46.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  47.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0x7X */
  48.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  49.     _L|_W,        _L|_W,        _L|_W,        0,
  50.     0,        0,        0,        0,
  51.     _W,        _W,        _W,        _W,    /* 0x8X */
  52.     _W,        _W,        _W,        _W,
  53.     _W,        _W,        _W,        _W,
  54.     _W,        _W,        _W,        _W,
  55.     _W,        _W,        _W,        _W,    /* 0x9X */
  56.     _W,        _W,        _W,        _W,
  57.     _W,        _W,        _W,        0,
  58.     0,        0,        0,        0,
  59.     _W,        _W,        _W,        _W,    /* 0xAX */
  60.     _W,        _W,        _W,        _W,
  61.     0,        0,        0,        0,
  62.     0,        0,        0,        0,
  63.     0,        0,        0,        0,    /* 0xBX */
  64.     0,        0,        0,        0,
  65.     0,        0,        0,        0,
  66.     0,        0,        0,        0,
  67.     0,        0,        0,        0,    /* 0xCX */
  68.     0,        0,        0,        0,
  69.     0,        0,        0,        0,
  70.     0,        0,        0,        0,
  71.     0,        0,        0,        0,    /* 0xDX */
  72.     0,        0,        0,        0,
  73.     0,        0,        0,        0,
  74.     0,        0,        0,        0,
  75.     0,        0,        0,        0,    /* 0xEX */
  76.     0,        0,        0,        0,
  77.     0,        0,        0,        0,
  78.     0,        0,        0,        0,
  79.     0,        0,        0,        0,    /* 0xFX */
  80.     0,        0,        0,        0,
  81.     0,        0,        0,        0,
  82.     0,        0,        0,        0,
  83. };
  84.  
  85. /*
  86.  * Find the name of a keystroke.  Needs to be changed to handle 8-bit printing
  87.  * characters and function keys better.     Returns a pointer to the terminating
  88.  * '\0'.
  89.  */
  90.  
  91. char *keyname(cp, k)
  92. register char *cp;
  93. register int k;
  94. {
  95.     register char *np;
  96. #ifdef    FKEYS
  97.     extern char *keystrings[];
  98. #endif
  99.  
  100.     if(k < 0) k = CHARMASK(k);            /* sign extended char */
  101.     switch(k) {
  102.     case CCHR('@'): np = "NUL"; break;
  103.     case CCHR('I'): np = "TAB"; break;
  104.     case CCHR('J'): np = "LFD"; break; /* yuck, but that's what GNU calls it */
  105.     case CCHR('M'): np = "RET"; break;
  106.     case CCHR('['): np = "ESC"; break;
  107.     case ' ':    np = "SPC"; break; /* yuck again */
  108.     case CCHR('?'): np = "DEL"; break;
  109.     default:
  110. #ifdef    FKEYS
  111.         if(k >= KFIRST && k <= KLAST &&
  112.             (np = keystrings[k - KFIRST]) != NULL)
  113.         break;
  114. #endif
  115.         if(k > CCHR('?')) {
  116.         *cp++ = '0';
  117.         *cp++ = ((k>>6)&7) + '0';
  118.         *cp++ = ((k>>3)&7) + '0';
  119.         *cp++ = (k&7) + '0';
  120.         *cp = '\0';
  121.         return cp;
  122.         }
  123.         if(k < ' ') {
  124.         *cp++ = 'C';
  125.         *cp++ = '-';
  126.         k = CCHR(k);
  127.         if(ISUPPER(k)) k = TOLOWER(k);
  128.         }
  129.         *cp++ = k;
  130.         *cp = '\0';
  131.         return cp;
  132.     }
  133.     (VOID) strcpy(cp, np);
  134.     return cp + strlen(cp);
  135. }
  136.